Apache CXF এর মাধ্যমে Logging Configuration

Web Development - অ্যাপাচি সিএক্সএফ (Apache CXF) - Logging এবং Monitoring (লগিং এবং মনিটরিং) |

Apache CXF একটি শক্তিশালী ওয়েব সার্ভিস ফ্রেমওয়ার্ক যা SOAP এবং RESTful ওয়েব সার্ভিস তৈরি এবং পরিচালনার জন্য ব্যবহৃত হয়। এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল এর লোগিং ফিচার, যা ওয়েব সার্ভিসের মেসেজ এবং প্রসেসিং সম্পর্কিত তথ্য লগ করার সুবিধা দেয়। এই লোগিং কনফিগারেশন আপনাকে ওয়েব সার্ভিসের কার্যকারিতা ট্র্যাক করতে, ডিবাগ করতে এবং সমস্যা চিহ্নিত করতে সাহায্য করে।

CXF মেসেজ লোগিং কনফিগারেশনে SOAP রিকোয়েস্ট এবং রেসপন্স, HTTP হেডার এবং অন্যান্য গুরুত্বপূর্ণ মেটাডেটা অন্তর্ভুক্ত হতে পারে। এখানে, আমরা দেখব কিভাবে Apache CXF এর মাধ্যমে লগিং কনফিগার করা যায়।


Apache CXF এর লোগিং কনফিগারেশন এর ধাপ

1. Maven Dependencies

প্রথমে, আপনাকে Apache CXF এর লোগিং ফিচার ব্যবহারের জন্য প্রয়োজনীয় Maven ডিপেনডেন্সি যোগ করতে হবে। এই ডিপেনডেন্সি লোগিং সম্পর্কিত ক্লাস এবং ফিল্টার সরবরাহ করবে।

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.5.0</version>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-logging</artifactId>
    <version>3.5.0</version>
</dependency>

2. CXF Logging Configuration

Apache CXF এর লগিং কনফিগারেশন করার জন্য, আপনাকে org.apache.cxf.transport.common.gzip.GZIPInInterceptor এবং org.apache.cxf.transport.common.gzip.GZIPOutInterceptor এর মতো ফিল্টার ব্যবহার করতে হবে। তবে এর জন্য CXF Logging Interceptor ব্যবহার করা হয়, যা SOAP মেসেজের কনটেন্ট এবং অন্যান্য তথ্য লগ করতে সহায়তা করে।

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.Bus;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CxfConfig {

    @Bean
    public JaxWsServerFactoryBean jaxWsServerFactoryBean() {
        JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
        factoryBean.setServiceClass(HelloWorldService.class);
        factoryBean.setAddress("/ws/helloWorld");

        // Logging Interceptors
        factoryBean.getInInterceptors().add(new LoggingInInterceptor());
        factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());

        return factoryBean;
    }

    @Bean
    public CXFServlet cxfServlet() {
        return new CXFServlet();
    }
}

এখানে, LoggingInInterceptor এবং LoggingOutInterceptor ইন্টারসেপ্টর ব্যবহার করা হয়েছে, যা ইনকামিং এবং আউটগোইং SOAP মেসেজের লগ করবে।

3. Log Level কনফিগারেশন

CXF এর লগিং কনফিগারেশনে আপনি লগের স্তর (log level) নির্ধারণ করতে পারেন। লগ স্তর নির্ধারণ করতে আপনাকে সাধারণত log4j বা slf4j কনফিগারেশন ফাইল ব্যবহার করতে হবে। নিচে log4j.properties ফাইলে কিভাবে লগ স্তর কনফিগার করা যায় তা দেখানো হল:

log4j.rootLogger=DEBUG, stdout

# Console logging configuration
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n

# CXF specific logging
log4j.logger.org.apache.cxf=DEBUG
log4j.logger.org.apache.cxf.services=DEBUG
log4j.logger.org.apache.cxf.transport.http=DEBUG

এখানে, log4j.logger.org.apache.cxf লগ স্তরকে DEBUG সেট করা হয়েছে, যা বিস্তারিত লগিং করবে। এটি SOAP মেসেজের মধ্যে পাঠানো ডেটা, প্রাপ্ত ডেটা এবং অন্যান্য তথ্য ধারণ করবে।

4. Advanced Logging (Payload Logging)

আপনি যদি মেসেজের পে-লোড (payload) লগ করতে চান, তবে আপনাকে LoggingInInterceptor এবং LoggingOutInterceptor এর কনফিগারেশনে কিছু অতিরিক্ত প্রপার্টি সেট করতে হবে, যেমন:

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class CxfConfig {

    @Bean
    public JaxWsServerFactoryBean jaxWsServerFactoryBean() {
        JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
        factoryBean.setServiceClass(HelloWorldService.class);
        factoryBean.setAddress("/ws/helloWorld");

        // Configuring logging to log message payloads
        LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor();
        loggingInInterceptor.setPrettyLogging(true); // Pretty print for request message
        factoryBean.getInInterceptors().add(loggingInInterceptor);

        LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor();
        loggingOutInterceptor.setPrettyLogging(true); // Pretty print for response message
        factoryBean.getOutInterceptors().add(loggingOutInterceptor);

        return factoryBean;
    }
}

এখানে, setPrettyLogging(true) প্যারামিটার ব্যবহার করে মেসেজের পাঠানো এবং প্রাপ্ত ডেটার প্রিন্ট আউটকে সুন্দরভাবে দেখতে পারবেন, যা ডিবাগিং এবং টেস্টিংয়ের জন্য উপকারী।

5. Logging Exception Handling

CXF ওয়েব সার্ভিসে কোনো এক্সসেপশন ঘটলে সেটিও লগ করা উচিত। এর জন্য আপনাকে Fault Interceptor ব্যবহার করতে হবে। নিম্নলিখিত কোডে এটি কিভাবে কনফিগার করা যাবে তা দেখানো হল:

import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;

public class LoggingFaultInterceptor extends LoggingInInterceptor {

    @Override
    public void handleMessage(org.apache.cxf.message.Message message) throws Fault {
        try {
            super.handleMessage(message);  // Standard logging
        } catch (Fault fault) {
            // Log the exception
            System.out.println("Logging Exception: " + fault.getMessage());
            throw fault;
        }
    }
}

এটি যদি কোনো Fault বা এক্সসেপশন হয়, তবে সেটি কনসোলে লগ করবে এবং অ্যাপ্লিকেশনের অন্যান্য অংশে তথ্য পাস করবে।


উপসংহার

Apache CXF এর লগিং কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি আপনাকে SOAP এবং RESTful ওয়েব সার্ভিসের কার্যকারিতা ট্র্যাক করতে এবং সহজে ডিবাগ করতে সহায়তা করে। LoggingInInterceptor এবং LoggingOutInterceptor এর মাধ্যমে আপনি ইনকামিং এবং আউটগোইং SOAP মেসেজের কনটেন্ট লগ করতে পারেন, এবং log4j বা slf4j এর মাধ্যমে লগ স্তর কনফিগার করে মেসেজের বিস্তারিত আউটপুট পেতে পারেন।

Content added By
Promotion